specs for the public transport agent

Umar M. Sheikh 11 years ago
parent
commit
f104ce335c

+ 1 - 1
app/models/agents/public_transport_agent.rb

@@ -63,7 +63,7 @@ module Agents
63 63
         predictions = page.css("//prediction")
64 64
         predictions.each do |pr|
65 65
           parent = pr.parent.parent
66
-          vals = {routeTitle: parent["routeTitle"], stopTag: parent["stopTag"]}
66
+          vals = {"routeTitle" => parent["routeTitle"], "stopTag" => parent["stopTag"]}
67 67
           if pr["minutes"] && pr["minutes"].to_i < options["alert_window_in_minutes"].to_i
68 68
             vals = vals.merge Hash.from_xml(pr.to_xml)
69 69
             if not_already_in_memory?(vals)

+ 57 - 0
spec/models/agents/public_transport_agent_spec.rb

@@ -0,0 +1,57 @@
1
+
2
+require 'spec_helper'
3
+require 'pry'
4
+describe Agents::PublicTransportAgent do
5
+  before do
6
+    valid_params = {
7
+    "name" => "sf muni agent",
8
+    "options" => {
9
+        "alert_window_in_minutes" => "20",
10
+        "stops" => ['N|5221', 'N|5215'],
11
+        "agency" => "sf-muni"
12
+      }
13
+    }
14
+    @agent = Agents::PublicTransportAgent.new(valid_params)
15
+    @agent.user = users(:bob)
16
+    @agent.save!
17
+  end
18
+  describe "#check" do
19
+    before do
20
+      stub_request(:get, "http://webservices.nextbus.com/service/publicXMLFeed?a=sf-muni&command=predictionsForMultiStops&stops=N%7C5215").
21
+         with(:headers => {'User-Agent'=>'Typhoeus - https://github.com/typhoeus/typhoeus'}).
22
+         to_return(:status => 200, :body => File.read(Rails.root.join("spec/data_fixtures/public_transport_agent.xml")), :headers => {})
23
+      stub(Time).now {"2014-01-14 20:21:30 +0500".to_time}
24
+    end
25
+    it "should create 4 events" do
26
+      lambda { @agent.check }.should change {@agent.events.count}.by(4)
27
+    end
28
+    it "should add 4 items to memory" do
29
+      @agent.memory.should == {}
30
+      @agent.check
31
+      @agent.memory.should == {"existing_routes" => [{"stopTag"=>"5221", "tripTag"=>"5840324", "epochTime"=>"1389706393991", "currentTime"=>"2014-01-14 20:21:30 +0500"}, {"stopTag"=>"5221", "tripTag"=>"5840083", "epochTime"=>"1389706512784", "currentTime"=>"2014-01-14 20:21:30 +0500"}, {"stopTag"=>"5215", "tripTag"=>"5840324", "epochTime"=>"1389706282012", "currentTime"=>"2014-01-14 20:21:30 +0500"}, {"stopTag"=>"5215", "tripTag"=>"5840083", "epochTime"=>"1389706400805", "currentTime"=>"2014-01-14 20:21:30 +0500"}]
32
+      }
33
+    end
34
+    it "should not create events twice" do
35
+      lambda { @agent.check }.should change {@agent.events.count}.by(4)
36
+      lambda { @agent.check }.should_not change {@agent.events.count}
37
+    end
38
+  end
39
+  describe "validation" do
40
+    it "should validate presence of stops" do
41
+      @agent.options['stops'] = nil
42
+      @agent.should_not be_valid
43
+    end
44
+
45
+    it "should validate presence of agency" do
46
+      @agent.options['agency'] = ""
47
+      @agent.should_not be_valid
48
+    end
49
+
50
+    it "should validate presence of alert_window_in_minutes" do
51
+      @agent.options['alert_window_in_minutes'] = ""
52
+      @agent.should_not be_valid
53
+    end
54
+
55
+  end
56
+
57
+end